package core

// Action flow 执行操作行为类别
type Action struct {
	ForceEntryNext bool   // 强制进入下一层,默认Next()如果本次函数执行结果为空,则不会继续执行,ForceEntryNext 为true时,则强制进入下一层(同理下层的Next函数不需要依赖参数)。
	DataReuse      bool   // DataReuse数据复用(相当于同级别函数使用的数据源都是同一个上层结果。)
	JumpFunc       string // 跳转到指定的Function1继续执行(该函数必须要注册在当前Flow内部),然后会直接依赖的数据就是目标Function1的上层函数结果集。
	Abort          bool   // Abort中止flow的执行
}

type ActionFunc func(ops *Action)

// ActionAbort 中止flow的执行
func ActionAbort(action *Action) {
	action.Abort = true
}

// ActionDataReuse Next复用上层Function数据Option
func ActionDataReuse(act *Action) {
	act.DataReuse = true
}

// ActionForceEntryNext 强制进入下一层
func ActionForceEntryNext(act *Action) {
	act.ForceEntryNext = true
}

// ActionJumpFunc 跳转到指定的Function继续执行
func ActionJumpFunc(funcName string) ActionFunc {
	return func(ops *Action) {
		ops.JumpFunc = funcName
	}
}

// LoadActions 加载Action,依次执行ActionFunc操作函数返回最终Action活动状态
func LoadActions(acts []ActionFunc) Action {
	action := Action{}
	if acts == nil {
		return action
	}
	for _, act := range acts {
		act(&action)
	}
	return action
}
